Karine Pietropaoli, CMW CNRS
Karine Pietropaoli, CMW CNRS
I Gestion et manipulation d’objets spatiaux avec sf et dplyr
II La cartographie thématique avec cartography
III La cartographie dynamique avec leaflet
install.packages("sf") # Gestion et manipulation d'objets spatiaux
install.packages("dplyr") # Manipulation de tableaux de données
install.packages("cartography") # Création de cartes thématiques
install.packages("leaflet") # Création de cartes web dynamiqueslibrary(sf)
library(dplyr)
library(cartography)
library(leaflet) sf et dplyrdyplrLe format propriétaire shapefile (extension .shp) est parmi les formats de fichiers d’images vectorielles les plus utilisés. Ce fichier .shp stocke toute l’information liée à la géométrie des objets qu’il décrit et s’accompagne toujours d’au moins deux autres fichiers (.dbf et .shx) qui contiennent des informations complémentaires sur ces objets
st_read permet d’importer les shapefiles (et les autres formats SIG) dans R. com <- st_read(dsn = "SHP/COMMUNE_IGN", layer = "COMMUNE")
dep <- st_read(dsn = "SHP/DEPARTEMENT_IGN", layer = "DEPARTEMENT")
grandlyon <- st_read(dsn = "SHP/COMMUNE_GLYON", layer = "adr_voie_lieu.adrcommune")class(com)## [1] "sf" "data.frame"
com est à la fois un objet sf et data.frame. Les objets sfsont des data.frames enrichis d’une colonne contenant des géométries (listes de coordonnées définissant des points, des lignes ou des surfaces).
st_crs permet de connaître la projection de nos objets spatiauxst_crs(com) # Voir la projection ## Coordinate Reference System:
## No EPSG code
## proj4string: "+proj=lcc +lat_1=44 +lat_2=49 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +units=m +no_defs"
st_crs(grandlyon) ## Coordinate Reference System:
## EPSG: 4326
## proj4string: "+proj=longlat +datum=WGS84 +no_defs"
st_crs(com) == st_crs(grandlyon) ## [1] FALSE
Ici, nos données spatiales sont dans des projections différentes
st_transform :com <- st_transform(com, crs = 4326)
dep <- st_transform(dep, crs = 4326)
st_crs(com) # Voir la projection ## Coordinate Reference System:
## EPSG: 4326
## proj4string: "+proj=longlat +datum=WGS84 +no_defs"
dyplrsf étant aussi des data.frames “classiques”, nous pouvons les manipuler comme tels et c’est tout l’intérêt !names(com)## [1] "ID_GEOFLA" "CODE_COM" "INSEE_COM" "NOM_COM"
## [5] "STATUT" "X_CHF_LIEU" "Y_CHF_LIEU" "X_CENTROID"
## [9] "Y_CENTROID" "Z_MOYEN" "SUPERFICIE" "POPULATION"
## [13] "CODE_ARR" "CODE_DEPT" "NOM_DEPT" "CODE_REG"
## [17] "NOM_REG" "geometry"
Par exemple, pour travailler uniquement sur la région Auvergne Rhone-Alpes :
com_RA <- com %>% filter(CODE_REG == "84")
dep_RA <- dep %>% filter(CODE_REG == "84")ou sur la ville de Lyon :
code <- 69381:69389
arr_lyon <- com_RA %>% filter(INSEE_COM %in% code )sf, la jointure entre nos deux objets se fait comme pour deux data-frames classiques :load("base_insee.Rdata") # chargement des données
com_RA <- left_join(com_RA, base_insee, by = c("INSEE_COM"= "CODGEO"))source des données : base comparateur de territoires INSEE
st-geometryassociée à la fonction de base plot permet un affichage simple des objetsst_geometry(dep_RA) %>% plot()st_geometry(grandlyon) %>% plot(lwd = 0.5, col = NA, border = "grey40")
st_geometry(arr_lyon) %>% plot(lwd = 0.7, col= NA, border="red", add=TRUE)st_unionlyon <- st_union(arr_lyon)# résultat
st_geometry(lyon) %>% plot()st_centroidarr_lyon_c <- st_centroid(arr_lyon)
st_geometry(arr_lyon) %>% plot()
st_geometry(arr_lyon_c) %>% plot(pch=19, col="red", add=T)cartographyUne carte choroplèthe (du grec χώρος (khorê) : « zone/région » et πληθαίν (plethos) : « multiple ») est une représentation de quantités relatives à des espaces ou aires géographiques (tels la densité de population ou le revenu par habitant) par le moyen d’une « échelle » de tons gradués.
com_RA$dens <- 100 * com_RA$POPULATION/com_RA$SUPERFICIE # superficie en hectare
# 1 km2 = 100 hectares
# principaux indicateurs statistiques de la variable `dens`
summary(com_RA$dens)## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.079 17.324 48.346 179.948 120.896 19158.824
chorolayerchoroLayer(com_RA, var = "dens")# nombre de classes et discrétisation paramétrables >> 9 méthodes disponibles
# The "q6" method uses the following quantile probabilities:
#0, 0.05, 0.275, 0.5, 0.725, 0.95, 1.
choroLayer(com_RA, var = "dens" , method="q6" , nclass=6 )# Défintion d'une palette de couleurs avec la fonction `carto.pal`
mypalette <- carto.pal("orange.pal", 6)
# Contrôle de la légende et bordure
choroLayer(com_RA, var = "dens" , col=mypalette, border=NA, nclass = 6,
method="q6", legend.pos="topright", legend.title.txt = "")
# Ajout du nom des départements avec la fonction `labelLayer`
labelLayer(dep_RA, txt = "NOM_DEPT", cex = 0.7)
# Habillage titre, source, auteur, flêche nord... avec la fonction `layoutLayer`
layoutLayer(title = "Densité de population\n(habitants/km²)", sources = "GEOFLA® 2.2 IGN",
north = TRUE, author = "KP@2018" , scale = NULL, col = NA , coltitle = "black")
# Ajout de la limite des départements
st_geometry(dep) %>% plot(lwd = 0.7, col = NA, border = "black", add = TRUE)
st_geometry(dep_RA) %>% plot(lwd = 0.7, col = NA, border = "black", add = TRUE ) # extrait les communes du département de la Savoie
savoie <- com_RA %>% filter(DEP=="73")
# principaux indicateurs statistiques de la variable `P14_POP` (population 2014)
summary(savoie$P14_POP)## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 41.0 338.2 578.0 1462.1 1161.0 59490.0
propSymbolsLayer# affichage des communes du département
st_geometry(savoie) %>% plot(col = "#F1EEE8", border = "grey40")
# affichage des cercles proportionnels avec la fonction `propSymbolsLayer`
propSymbolsLayer(savoie, var = "P14_POP") # affichage des communes du département et contrôle des couleurs
st_geometry(savoie) %>% plot(col = "lightblue", border = "lightblue4", bg="lightblue1")
# contrôle des couleurs des symboles et de la légende
propSymbolsLayer(savoie, var = "P14_POP",
col = "white",
border = "grey",
legend.title.txt = "",
legend.style = "e")
# Habillage titre, source, auteur, flêche nord... avec la fonction `layoutLayer`
layoutLayer(title = "Nombre d'habitants dans le département de la Savoie",
sources = "INSEE", theme = "blue.pal",
scale = NULL, north = TRUE , author = "KP@2018")
# Ajout de la limite des départements alentour
st_geometry(dep_RA) %>% plot(lwd = 1, col = NA, border = "grey40", add = TRUE)leafletLeaflet…leaflet() %>% # initialisation de la carte
addTiles() # ajout des carreaux OpenStreetMap par défautaddCircleMarkersleaflet() %>% # initialisation de la carte
addTiles() %>% # ajout des carreaux OpenStreetMap par défaut
addCircleMarkers(data= arr_lyon_c) # ajout d'un un point addPolygonsleaflet() %>% # initialisation de la carte
addTiles() %>% # ajout des carreaux OpenStreetMap par défaut
addCircleMarkers(data= arr_lyon_c) %>% # ajout d'un point
addPolygons(data=arr_lyon) # ajout d'un polygoneleaflet() %>%
addTiles() %>%
addCircleMarkers(data= arr_lyon_c,# ajout des cercles
radius = 4, # contrôle de la taille du cercle
fillColor = "brown", fillOpacity = 1,# gestion de la couleur et de l'opacité de l'intérieur du cercle
stroke = F) %>% # élimine le trait du cercle
addPolygons(data=arr_lyon, # ajout polygone
popup = arr_lyon$NOM_COM,# affichage d'un label au clic
color = "brown", opacity = 0.5 , weight=2, fillColor = "brown") # gestion de la couleur, de l'opacité et de l'épaisseur du trait leaflet() %>%
addTiles() %>%
addPolygons(data=arr_lyon) %>%
addCircleMarkers(data= arr_lyon_c,
fillColor = "brown", fillOpacity = 1, stroke = FALSE,
radius = sqrt((arr_lyon_c$POPULATION/100)/3.14), # aire cercle = pi * R^2
popup= as.character(arr_lyon_c$POPULATION)) RColorBrewer# installation et chargement de l'extension
install.packages ("RColorBrewer")library(RColorBrewer)# visualisation des différentes palettes de RColorBrewer
display.brewer.all()# filtre les communes de la Haute-Savoie
hsavoie <- com_RA %>% filter (DEP=="74")
# résumé statistique de la variable "MED14", (revenu médian 2014)
summary(hsavoie$MED14)## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 18881 23114 25651 26676 29251 45902 1
colorNumeric# définition palette
palette <- colorNumeric( palette = "YlOrRd", domain = hsavoie$MED14)
leaflet() %>%
addTiles() %>%
addPolygons(data=hsavoie, color="white", weight=2, fillColor = palette(hsavoie$MED14),
popup= as.character(round(hsavoie$MED14,0)), fillOpacity=1) %>%
addLegend(pal = palette, values = hsavoie$MED14, position="topright", opacity=1,
title="Niveau de vie médian") # ajout de la légendecolorBincl <- c(18000, 23000, 28000, 33000, 38000, 43000, Inf) # définition des bornes de classes
# définition palette
palette <- colorBin( palette = "YlOrRd", domain = hsavoie$MED14, bins = cl)
# carte
leaflet() %>%
addTiles() %>%
addPolygons(data=hsavoie, color="white", weight=2, fillColor = palette(hsavoie$MED14),
popup= as.character(round(hsavoie$MED14, 0)), fillOpacity=1) %>%
addLegend(pal = palette, values = hsavoie$MED14, position="topright", opacity=1,
title="Niveau de vie médian") colorQuantile# définition palette
palette <- colorQuantile( palette = "YlOrRd", domain = hsavoie$MED14)
# carte
leaflet() %>%
addTiles() %>%
addPolygons(data=hsavoie, color="white", weight=2, fillColor = palette(hsavoie$MED14),
popup= as.character(round(hsavoie$MED14, 0)), fillOpacity=0.6) %>%
addLegend(pal = palette, values = hsavoie$MED14, position="topright", opacity=0.6,
title="Quartile niveau de vie") palette <- colorNumeric(palette = "YlOrRd", domain = hsavoie$MED14)
leaflet() %>%
addTiles() %>%
addPolygons(data=hsavoie, color="white", weight=2, fillColor = palette(hsavoie$MED14),
label = paste(hsavoie$NOM_COM, "-", round(hsavoie$MED14,0)), fillOpacity=1,
highlight = highlightOptions(bringToFront = TRUE, color = "grey")) %>%
addLegend(pal = palette, values = hsavoie$MED14, position="topright", opacity=1,
title="Niveau de vie médian")
sf : https://github.com/r-spatial/sf/tree/master/vignettes
dplyret du tidyverse : https://juba.github.io/tidyverse/index.html
cartography : https://cran.r-project.org/web/packages/cartography/vignettes/cartography.html
leaflet : https://rstudio.github.io/leaflet/